﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using bolsatrabajo.Dominio.DAO;

namespace bolsatrabajo.Persistencia.DAO
{
    public class AvisoDAO
    {
        private String cadenaconexion = "Data Source=(local); Initial Catalog=bdbolsatrabajo; User Id=root; Password=12345678;";

        private SqlConnection conexion;
        public AvisoDAO()
        {
            conexion = new SqlConnection(cadenaconexion);
        }
        
        public Aviso CrearAviso(Aviso aviso)
        {
            OfertanteDAO ofertanteDAO = new OfertanteDAO();
            if(ofertanteDAO.ObtenerOfertante(aviso.CorreoOfertante)!=null)
            {
                if (this.ObtenerxId_Aviso(aviso.Id_Aviso) != null)
                {
                    throw new Exception("El Id del Aviso ya existe!");
                }
                else
                {
                    if (this.ObtenerAvisoCorreo_Aviso(aviso.CorreoOfertante, aviso.Id_Aviso) == null)
                    {
                        conexion.Open();
                        String sentencia = "insert into tbaviso values('" + aviso.Titulo + "',  convert(datetime,'" + aviso.FechaVigencia + "',103), '" + aviso.DescripcionEmpresa + "', '" + aviso.DescripcionPuesto + "', " + aviso.Id_Aviso + ", '" + aviso.CorreoOfertante + "' ,convert(datetime,'" + aviso.FechaRegistro + "', 103))";
                        SqlCommand comando = new SqlCommand(sentencia, conexion);
                        comando.ExecuteNonQuery();
                    }
                    else
                    {
                        throw new Exception("Aviso ya esta registrado");
                    }
                }
            }
            else
            {
                throw new Exception("Ofertante No existe");
            }
            conexion.Close();
            return this.ObtenerAvisoCorreo_Aviso(aviso.CorreoOfertante, aviso.Id_Aviso);
        }
        
        public Aviso ObtenerAvisoCorreo_Aviso(String correo, Int32 id)
        {
            conexion.Open();
            String sentencia = "select id_aviso, titulo, correoofertante, descripcionempresa, descripcionpuesto, convert(nvarchar, fecharegistro) as fecharegistro, convert(nvarchar, fechavigencia) as fechavigencia from tbaviso where correoofertante='" + correo + "' and id_aviso="+id+"";
            SqlCommand comando = new SqlCommand(sentencia, conexion);
            SqlDataReader resultado = comando.ExecuteReader();
            Aviso aviso = null;
            if (resultado.HasRows)
            {
                resultado.Read();
                aviso = new Aviso();
                aviso.Id_Aviso=(Int32)resultado["id_aviso"];
                aviso.Titulo = (String)resultado["titulo"];
                aviso.CorreoOfertante=(String)resultado["correoofertante"];
                aviso.DescripcionEmpresa=(String)resultado["descripcionempresa"];
                aviso.DescripcionPuesto=(String)resultado["descripcionpuesto"];
                aviso.FechaRegistro=(String)resultado["fecharegistro"];
                aviso.FechaVigencia=(String)resultado["fechavigencia"];
            }
            conexion.Close();
            return aviso;
        }
        
        public Aviso ObtenerxId_Aviso(Int32 id)
        {
            conexion.Open();
            String sentencia = "select id_aviso, titulo, correoofertante, descripcionempresa, descripcionpuesto, convert(nvarchar, fecharegistro) as fecharegistro, convert(nvarchar, fechavigencia) as fechavigencia from tbaviso where id_aviso=" + id;
            SqlCommand comando = new SqlCommand(sentencia, conexion);
            SqlDataReader resultado = comando.ExecuteReader();
            Aviso aviso = null;
            if (resultado.HasRows)
            {
                resultado.Read();
                aviso = new Aviso();
                aviso.Id_Aviso = (Int32)resultado["id_aviso"];
                aviso.Titulo = (String)resultado["titulo"];
                aviso.CorreoOfertante = (String)resultado["correoofertante"];
                aviso.DescripcionEmpresa = (String)resultado["descripcionempresa"];
                aviso.DescripcionPuesto = (String)resultado["descripcionpuesto"];
                aviso.FechaRegistro = (String)resultado["fecharegistro"];
                aviso.FechaVigencia = (String)resultado["fechavigencia"];
            }
            conexion.Close();
            return aviso;
        }
        
        public Aviso ObtenerxCorreoOfertante(String correo)
        {
            conexion.Open();
            String sentencia = "select id_aviso, titulo, correoofertante, descripcionempresa, descripcionpuesto, convert(nvarchar, fecharegistro) as fecharegistro, convert(nvarchar, fechavigencia) as fechavigencia from tbaviso where correoofertante='" + correo + "'";
            SqlCommand comando = new SqlCommand(sentencia, conexion);
            SqlDataReader resultado = comando.ExecuteReader();
            Aviso aviso = null;
            if (resultado.HasRows)
            {
                resultado.Read();
                aviso = new Aviso();
                aviso.Id_Aviso = (Int32)resultado["id_aviso"];
                aviso.Titulo = (String)resultado["titulo"];
                aviso.CorreoOfertante = (String)resultado["correoofertante"];
                aviso.DescripcionEmpresa = (String)resultado["descripcionempresa"];
                aviso.DescripcionPuesto = (String)resultado["descripcionpuesto"];
                aviso.FechaRegistro = (String)resultado["fecharegistro"];
                aviso.FechaVigencia = (String)resultado["fechavigencia"];
            }
            conexion.Close();
            return aviso;
        }
        
        public void EliminarAviso(Int32 Id)
        {
            if (this.ObtenerxId_Aviso(Id) != null)
            {
                conexion.Open();
                String sentencia = "DELETE FROM tbaviso WHERE id_aviso=" + Id;
                SqlCommand comando = new SqlCommand(sentencia, conexion);
                comando.ExecuteNonQuery();
                conexion.Close();
            }
            else
            {
                throw new Exception("El Aviso no existe");
            }
        }
        
        public Aviso ModificarAviso(Aviso aviso)
        {
            OfertanteDAO ofertanteDAO = new OfertanteDAO();
            if (ofertanteDAO.ObtenerOfertante(aviso.CorreoOfertante) != null)
            {
                if (this.ObtenerxId_Aviso(aviso.Id_Aviso) == null)
                {
                    throw new Exception("El Id del Aviso no existe!");
                }
                else
                {
                    if (this.ObtenerAvisoCorreo_Aviso(aviso.CorreoOfertante, aviso.Id_Aviso) != null)
                    {
                        conexion.Open();
                        String sentencia = "UPDATE tbaviso SET titulo='" + aviso.Titulo + "', descripcionempresa='" + aviso.DescripcionEmpresa + "', descripcionpuesto='" + aviso.DescripcionPuesto + "', fecharegistro=convert(datetime,'"+aviso.FechaRegistro+"', 103), fechavigencia=convert(datetime, '"+aviso.FechaVigencia+"',103) where id_aviso="+aviso.Id_Aviso+" and correoofertante='"+aviso.CorreoOfertante+"'";
                        SqlCommand comando = new SqlCommand(sentencia, conexion);
                        comando.ExecuteNonQuery();
                        conexion.Close();
                    }
                    else
                    {
                        throw new Exception("Aviso no registrado");
                    }
                }
            }
            else
            {
                throw new Exception("Ofertante No existe");
            }
            return this.ObtenerAvisoCorreo_Aviso(aviso.CorreoOfertante, aviso.Id_Aviso);
        }
    }
}